package com.webserver.core;

import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;

import java.io.File;
import java.net.URISyntaxException;

/**
 * Author：毕龙
 * Date: 2022/9/21 8:52
 * 用于完成个一个Http交互流中请求的环节工作
 *
 * 实际上这个类是Spring MVC框架的一个核心类 用于和Web容器（Tomcat）整合
 * 是的处理请求的环节可以由Spring MVC框架完成
 */
public class DispatcherServlet {
   public static DispatcherServlet instance = new DispatcherServlet();
   private static File dir;
   public static File staticDir;

   static {
       //定位环境变量ClassPath(类加载路径)”."的位置
       //在IDEA中执行项目时，类加载路径是从target/classes开始的
      try {
         dir = new File(ClientHandler.class.getClassLoader().getResource(".").toURI());
         //定位target/static目录
         staticDir = new File(dir,"static");

      } catch (URISyntaxException e) {
         e.printStackTrace();
      }

   }
   private DispatcherServlet(){}

   public static DispatcherServlet getInstance(){
      return instance;
   }

   /**
    * 处理请求的方法
    * @param request  请求对象 通过这个对象可以获取来自浏览器提交的内容
    * @param response 响应对象 通过响应对象可以处理结果 最终发送给浏览器
    */
   public void service(HttpServletRequest request, HttpServletResponse response){
      String path = request.getUri();
      System.out.println("获取请求的路径："+path);
      File file = new File(staticDir, path);
      if(file.isFile()){//浏览器请求的资源是否存在且是一个文件
         //正确响应其请求的文件
         response.setContentFile(file);
      }else{
         //不是响应404
         response.setStatusCode(404);
         response.setStatusReason("NotFount");
         file = new File(staticDir, "/root/404.html");
         response.setContentFile(file);

      }
   }


}
